import datetime
import decimal
from marshmallow.fields import *
from servicestack import *
from typing import *
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json, LetterCase, Undefined, config
from enum import Enum, IntEnum
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Environment:
title: Optional[str] = None
code: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Party:
title: Optional[str] = None
code: Optional[str] = None
version: Optional[str] = None
environment: Optional[Environment] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Header:
message_i_d: Optional[str] = None
timestamp: datetime.datetime = datetime.datetime(1, 1, 1)
sender: Optional[Party] = None
recipient: Optional[Party] = None
request_message_i_d: Optional[Object] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Reference:
global_i_d: Optional[str] = None
title: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Address:
address_line1: Optional[str] = None
address_line2: Optional[str] = None
house_number: Optional[str] = None
house_number_suffix: Optional[str] = None
postal_code: Optional[str] = None
city: Optional[str] = None
country: Optional[Reference] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class MailingAddress:
po_box: Optional[str] = None
postal_code: Optional[str] = None
city: Optional[str] = None
country: Optional[Reference] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Project:
global_i_d: Optional[str] = None
creation_date: Optional[datetime.datetime] = None
created_by: Optional[str] = None
modified_date: Optional[datetime.datetime] = None
modified_by: Optional[str] = None
code: Optional[str] = None
name: Optional[str] = None
description1: Optional[str] = None
description2: Optional[str] = None
address: Optional[Address] = None
mailing_address: Optional[MailingAddress] = None
project_category_reference: Optional[Reference] = None
project_type_reference: Optional[Reference] = None
project_status_reference: Optional[Reference] = None
start_date: Optional[datetime.datetime] = None
end_date: Optional[datetime.datetime] = None
completion_date: Optional[datetime.datetime] = None
inactive: bool = False
website: Optional[str] = None
is_template_project: bool = False
custom_fields: Optional[List[CustomField]] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ProjectResponseMessage:
header: Optional[Header] = None
project_reference: Optional[Reference] = None
project: Optional[Project] = None
housing_types: Optional[List[HousingType]] = None
construction_blocks: Optional[List[ConstructionBlock]] = None
construction_numbers: Optional[List[ConstructionNumber]] = None
documents: Optional[List[Document]] = None
purchase_contracts: Optional[List[PurchaseContract]] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ProjectRequestMessage:
header: Optional[Header] = None
project_reference: Optional[Reference] = None
include_housing_types: bool = False
include_construction_blocks: bool = False
include_construction_numbers: bool = False
include_documents: bool = False
include_purchase_contracts: bool = False
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ProcessProjectRequestMessage:
instance_id: Optional[str] = None
project_request: Optional[ProjectRequestMessage] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomField:
name: Optional[str] = None
value: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class HousingType:
global_i_d: Optional[str] = None
project_reference: Optional[Reference] = None
code: Optional[str] = None
description: Optional[str] = None
custom_fields: Optional[List[CustomField]] = None
creation_date: Optional[datetime.datetime] = None
created_by: Optional[str] = None
modified_date: Optional[datetime.datetime] = None
modified_by: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ConstructionBlock:
global_i_d: Optional[str] = None
project_reference: Optional[Reference] = None
code: Optional[str] = None
description: Optional[str] = None
custom_fields: Optional[List[CustomField]] = None
creation_date: Optional[datetime.datetime] = None
created_by: Optional[str] = None
modified_date: Optional[datetime.datetime] = None
modified_by: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ConstructionNumber:
global_i_d: Optional[str] = None
project_reference: Optional[Reference] = None
housing_type_reference: Optional[Reference] = None
construction_block_reference: Optional[Reference] = None
code: Optional[str] = None
description: Optional[str] = None
address: Optional[Address] = None
rental_house: bool = False
guarantee_certificate_number: Optional[str] = None
inactive: bool = False
custom_fields: Optional[List[CustomField]] = None
creation_date: Optional[datetime.datetime] = None
created_by: Optional[str] = None
modified_date: Optional[datetime.datetime] = None
modified_by: Optional[str] = None
viewing_date: Optional[datetime.datetime] = None
viewing_date_specified: bool = False
delivery_date: Optional[datetime.datetime] = None
delivery_date_specified: bool = False
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Document(ICustomProperties):
id: Optional[str] = None
root_document_i_d: Optional[str] = None
registrationprofile_i_d: Optional[str] = None
title: Optional[str] = None
full_title: Optional[str] = None
number: Optional[str] = None
version: Optional[str] = None
external_number: Optional[str] = None
external_version: Optional[str] = None
internal_number: Optional[str] = None
internal_invoice_number: Optional[str] = None
person_i_d: int = 0
relation_i_d: int = 0
relation_title: Optional[str] = None
project_i_d: int = 0
project_title: Optional[str] = None
extension: Optional[str] = None
date: Optional[datetime.datetime] = None
comments_count: int = 0
has_comments: bool = False
has_preview: bool = False
extra_field: Optional[str] = None
is_favorite: bool = False
documentcategory_text: Optional[str] = None
file_size: Optional[int] = None
file_date: Optional[datetime.datetime] = None
hash: Optional[str] = None
hash_type: Optional[str] = None
file_url: Optional[str] = None
standard_document_url: Optional[str] = None
is_corporate_identity: bool = False
user_title: Optional[str] = None
is_frozen: bool = False
internal_company_i_d: int = 0
direct_url: Optional[str] = None
allow_digital_signing_only_on_primary_versions: bool = False
is_primary_version: bool = False
file_extension: Optional[str] = None
custom_properties: Optional[Dict[str, Object]] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Relation:
global_i_d: Optional[str] = None
name_line1: Optional[str] = None
name_line2: Optional[str] = None
address: Optional[Address] = None
mailing_address: Optional[MailingAddress] = None
telephone: Optional[str] = None
mobile: Optional[str] = None
email: Optional[str] = None
iban: Optional[str] = None
bank_account_number: Optional[str] = None
website: Optional[str] = None
inactive: bool = False
custom_fields: Optional[List[CustomField]] = None
creation_date: Optional[datetime.datetime] = None
created_by: Optional[str] = None
modified_date: Optional[datetime.datetime] = None
modified_by: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PurchaseContract:
global_i_d: Optional[str] = None
code: Optional[str] = None
description: Optional[str] = None
project_reference: Optional[Reference] = None
product_code: Optional[str] = None
relation: Optional[Relation] = None
inactive: bool = False
custom_fields: Optional[List[CustomField]] = None
creation_date: Optional[datetime.datetime] = None
created_by: Optional[str] = None
modified_date: Optional[datetime.datetime] = None
modified_by: Optional[str] = None
Python ProcessProjectRequestMessage DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /jsv/reply/ProcessProjectRequestMessage HTTP/1.1
Host: kpm_digiofficeapigateway.tbi.nl
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length
{
ProjectRequest:
{
Header:
{
MessageID: String,
Timestamp: 0001-01-01,
Sender:
{
Title: String,
Code: String,
Version: String,
Environment:
{
Title: String,
Code: String
}
},
Recipient:
{
Title: String,
Code: String,
Version: String,
Environment:
{
Title: String,
Code: String
}
},
RequestMessageID: {}
},
ProjectReference:
{
GlobalID: String,
Title: String
},
IncludeHousingTypes: False,
IncludeConstructionBlocks: False,
IncludeConstructionNumbers: False,
IncludeDocuments: False,
IncludePurchaseContracts: False
}
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length
{
Header:
{
MessageID: String,
Timestamp: 0001-01-01,
Sender:
{
Title: String,
Code: String,
Version: String,
Environment:
{
Title: String,
Code: String
}
},
Recipient:
{
Title: String,
Code: String,
Version: String,
Environment:
{
Title: String,
Code: String
}
},
RequestMessageID: {}
},
ProjectReference:
{
GlobalID: String,
Title: String
},
Project:
{
GlobalID: String,
CreationDate: 0001-01-01,
CreatedBy: String,
ModifiedDate: 0001-01-01,
ModifiedBy: String,
Code: String,
Name: String,
Description1: String,
Description2: String,
Address:
{
AddressLine1: String,
AddressLine2: String,
HouseNumber: String,
HouseNumberSuffix: String,
PostalCode: String,
City: String,
Country:
{
GlobalID: String,
Title: String
}
},
MailingAddress:
{
POBox: String,
PostalCode: String,
City: String,
Country:
{
GlobalID: String,
Title: String
}
},
ProjectCategoryReference:
{
GlobalID: String,
Title: String
},
ProjectTypeReference:
{
GlobalID: String,
Title: String
},
ProjectStatusReference:
{
GlobalID: String,
Title: String
},
StartDate: 0001-01-01,
EndDate: 0001-01-01,
CompletionDate: 0001-01-01,
Inactive: False,
Website: String,
IsTemplateProject: False,
CustomFields:
[
{
Name: String,
Value: String
}
]
},
HousingTypes:
[
{
GlobalID: String,
ProjectReference:
{
GlobalID: String,
Title: String
},
Code: String,
Description: String,
CustomFields:
[
{
Name: String,
Value: String
}
],
CreationDate: 0001-01-01,
CreatedBy: String,
ModifiedDate: 0001-01-01,
ModifiedBy: String
}
],
ConstructionBlocks:
[
{
GlobalID: String,
ProjectReference:
{
GlobalID: String,
Title: String
},
Code: String,
Description: String,
CustomFields:
[
{
Name: String,
Value: String
}
],
CreationDate: 0001-01-01,
CreatedBy: String,
ModifiedDate: 0001-01-01,
ModifiedBy: String
}
],
ConstructionNumbers:
[
{
GlobalID: String,
ProjectReference:
{
GlobalID: String,
Title: String
},
HousingTypeReference:
{
GlobalID: String,
Title: String
},
ConstructionBlockReference:
{
GlobalID: String,
Title: String
},
Code: String,
Description: String,
Address:
{
AddressLine1: String,
AddressLine2: String,
HouseNumber: String,
HouseNumberSuffix: String,
PostalCode: String,
City: String,
Country:
{
GlobalID: String,
Title: String
}
},
RentalHouse: False,
GuaranteeCertificateNumber: String,
Inactive: False,
CustomFields:
[
{
Name: String,
Value: String
}
],
CreationDate: 0001-01-01,
CreatedBy: String,
ModifiedDate: 0001-01-01,
ModifiedBy: String,
ViewingDate: 0001-01-01,
ViewingDateSpecified: False,
DeliveryDate: 0001-01-01,
DeliveryDateSpecified: False
}
],
Documents:
[
{
GlobalID: String,
RootDocumentID: String,
Code: String,
Subject: String,
VersionNumber: String,
NewestVersion: False,
RelationReference:
{
GlobalID: String,
Title: String
},
DocumentTypeReference:
{
GlobalID: String,
Title: String
},
ProjectReference:
{
GlobalID: String,
Title: String
},
ConstructionBlockReference:
{
GlobalID: String,
Title: String
},
ConstructionNumberReference:
{
GlobalID: String,
Title: String
},
HousingTypeReference:
{
GlobalID: String,
Title: String
},
Floor: 0,
FloorSpecified: False,
DeletedDate: 0001-01-01,
DeletedDateSpecified: False,
File:
{
Type: String,
Name: String,
Size: 0,
Content: String,
ModifiedDate: 0001-01-01
},
CustomFields:
[
{
Name: String,
Value: String
}
],
CreationDate: 0001-01-01,
CreatedBy: String,
ModifiedDate: 0001-01-01,
ModifiedBy: String
}
],
PurchaseContracts:
[
{
GlobalID: String,
Code: String,
Description: String,
ProjectReference:
{
GlobalID: String,
Title: String
},
ProductCode: String,
Relation:
{
GlobalID: String,
NameLine1: String,
NameLine2: String,
Address:
{
AddressLine1: String,
AddressLine2: String,
HouseNumber: String,
HouseNumberSuffix: String,
PostalCode: String,
City: String,
Country:
{
GlobalID: String,
Title: String
}
},
MailingAddress:
{
POBox: String,
PostalCode: String,
City: String,
Country:
{
GlobalID: String,
Title: String
}
},
Telephone: String,
Mobile: String,
Email: String,
IBAN: String,
BankAccountNumber: String,
Website: String,
Inactive: False,
CustomFields:
[
{
Name: String,
Value: String
}
],
CreationDate: 0001-01-01,
CreatedBy: String,
ModifiedDate: 0001-01-01,
ModifiedBy: String
},
Inactive: False,
CustomFields:
[
{
Name: String,
Value: String
}
],
CreationDate: 0001-01-01,
CreatedBy: String,
ModifiedDate: 0001-01-01,
ModifiedBy: String
}
]
}